from itsdangerous import TimedJSONWebSignatureSerializer as Serializer,BadSignature
from mall import settings
from users.models import User
#就是带数据的 url地址 为了不让客户看到数据 采取加密方法
def generic_active_url(user_id,email):

    #token  中应该含有用户的信息
    #创建序列化器  为加密配置
    serializer = Serializer(settings.SECRET_KEY,3600)
    #组织数据
    data = {
        'id':user_id,
        'email':email
    }
    #对数据进行处理
    token = serializer.dumps(data)

    #返回url  加密的一般是二进制数据  不要忘记解码decode()
    return 'http://www.meiduo.site:8080/success_verify_email.html?token=' + token.decode()


#创建解密方法  既然加密 肯定要解开 不然 就没意义
def get_active_user(token):

    #创建序列化器
    serializer = Serializer(settings.SECRET_KEY,3600)
    #调用序列化器的loads方法 判断异常
    try:
        result = serializer.loads(token)
    except BadSignature:
        return None
    else:
        id = result.get('id')
        email = result.get('email')
        # 为了让查询更准确 可以我们通过 and查询 ( where id=1 and email=123@qq.com)

        try:
        # 3. 如果获取了 id,我们再根据id进行用户的对象查询
            user = User.objects.get(id=id,email=email)
        except User.DoesNotExist:
            return None
        else:
            return user
